import box/{ui,condit,logger}

# 切换源
Switch-Mirror(){
  local MirrorDir=$PREFIX/etc/termux
  local CnMDir=$MirrorDir/mirrors/chinese_mainland
  local MirrorList=($(ls $CnMDir -A))
  local DefM=$MirrorDir/chosen_mirrors
  local ListLink=$(basename $(readlink $DefM) 2>/dev/null)
  local IsCnM=false

  for i in ${MirrorList[@]};do
    if In-Value i == ListLink;then
      local IsCnM=true
      break
    fi
  done

  if In-Value IsCnM;then
    Info "已在使用国内源，无需再次切换"
  else
    yes | pkg update
    unset -v Choose
    
    Get-List-Ui \
    --title="选择要使用的镜像源" \
    --tip="按 ↑↓ 选择, 按 Ether 选中, 按 ESC 退出" \
    --print-choose --print-number --retract --beep \
    "${MirrorList[@]}"
    local Choose=$[__return__-1]
    ((__return__)) || { Info "退出";exit;}
    
    local NewM=$CnMDir/${MirrorList[Choose]}
    unlink $DefM
    ln -sv $NewM $DefM
    pkg --check-mirror update
  fi
}

# 安装多个软件，但是过滤已安装项
# 用法: Install-Pkg [Name1] [Name2] [Name3]...
Install-Pkg(){
  Info "准备更换默认软件源"
  Switch-Mirror
  Install_Apps=($@)
  Has-Pkg-List ${Install_Apps[@]}
  if [ ! -z $Has_Pkg_List ];then
    Info "欲准备安装 ${#Install_Apps[@]} 个主要软件"
    if apt --fix-broken install -y ${Has_Pkg_List[@]};then
      Info "完成"
      return 0
    else
      Err "异常"
      return 1
    fi
  else
    Info "无可安装的软件，一切就绪"
  fi
}

# 循环
Has-Pkg-List(){
  # 用法: Has-Pkg-List [命令1] [命令2] [命令3]...
  # 用于集中判断多个软件存在
  # 所有软件均存在则返回 0，反之为 1
  # 不存在的软件将储存在数组变量 Has_Pkg_List 中
  unset -v Has_Pkg_List
  Has_Pkg_List=()
  local num=0
  local list=$#
  for i in $@;do
    if Has-Pkg $i;then
      let num++
    else
      Has_Pkg_List+=($i)
    fi
  done
  if ((num==list));then
    return 0
  else
    return 1
  fi  
}